#include "mpuiic.h"

/**
 * @brief MUP6050 I2C连续写
 * @param addr:器件地址
 * @param reg:寄存器地址
 * @param len:长度
 * @param buf:缓冲区地址
 * @return 状态 0成功 其他失败
 * @author HZ12138
 * @date 2022-08-08 15:47:11
 */
uint8_t MPU_Write_Len(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf) {
	uint8_t i;
	iic_start();
	iic_send_byte((addr << 1) | 0); 				//发送器件地址+写命令
	iic_wait_ack();
	iic_send_byte(reg);			//写寄存器地址
	iic_wait_ack();
	for (i = 0; i < len; i++) {
		iic_send_byte(buf[i]); //发送数据
		iic_wait_ack();
	}
	iic_stop();
	return 0;
}
/**
 * @brief MUP6050 I2C连续读
 * @param addr:器件地址
 * @param reg:寄存器地址
 * @param len:长度
 * @param buf:缓冲区地址
 * @return 状态 0成功 其他失败
 * @author HZ12138
 * @date 2022-08-08 15:47:11
 */
uint8_t MPU_Read_Len(uint8_t addr, uint8_t reg, uint8_t len, uint8_t *buf) {
	iic_start();
	iic_send_byte((addr << 1) | 0); 		//发送器件地址+写命令
	iic_wait_ack();
	iic_send_byte(reg);			   	//写寄存器地址
	iic_wait_ack();

	iic_start();
	iic_send_byte((addr << 1) | 1); //发送器件地址+读命令
	iic_wait_ack();

	while (len) {
		if (len == 1)
			*buf = iic_read_byte(0); //读数据,发送nACK
		else
			*buf = iic_read_byte(1); //读数据,发送ACK
		len--;
		buf++;
	}
	iic_stop(); //产生一个停止条件
	return 0;
}
/**
 * @brief MUP6050 I2C写一个字节
 * @param reg:寄存器地址
 * @param data:数据
 * @return 状态 0成功 其他失败
 * @author HZ12138
 * @date 2022-08-08 15:47:11
 */
uint8_t MPU_Write_Byte(uint8_t reg, uint8_t data) {
	iic_start();
	iic_send_byte((MPU_ADDR << 1) | 0); //发送器件地址+写命令
	iic_wait_ack();
	iic_send_byte(reg);				   //写寄存器地址
	iic_wait_ack();
	iic_send_byte(data);				   //发送数据
	iic_wait_ack();
	iic_stop();
	return 0;
}
/**
 * @brief MUP6050 I2C写一个字节
 * @param reg:寄存器地址
 * @return 读取到的数据
 * @author HZ12138
 * @date 2022-08-08 15:47:11
 */
uint8_t MPU_Read_Byte(uint8_t reg) {
	uint8_t res;
	iic_start();
	iic_send_byte((MPU_ADDR << 1) | 0); //发送器件地址+写命令
	iic_wait_ack();
	iic_send_byte(reg);				   //写寄存器地址
	iic_wait_ack();

	iic_start();
	iic_send_byte((MPU_ADDR << 1) | 1); //发送器件地址+读命令
	iic_wait_ack();
	res = iic_read_byte(0);			   //读取数据,发送nACK
	iic_stop();						   //产生一个停止条件
	return res;
}
